package com.alks.entity.data.enums.stock;

import lombok.Getter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author MS
 * @since 2024/6/28下午8:15
 */

@Getter
public enum LsTypeEnum{
    SG_IN("H","手工收料"),
    SM_IN("F","扫描收料"),
    SEND_OUT("S","发料");

    private final String typeCode;
    private final String typeName;

    /**
     * 用于检索
     */
    private static final Map<String,String> TYPE_CODE_MAP = new HashMap<>();
    static {
        for (LsTypeEnum type : values()) {
            TYPE_CODE_MAP.put(type.getTypeCode(),type.typeName);
        }
    }

    LsTypeEnum(String typeCode,String typeName) {
        this.typeCode = typeCode;
        this.typeName = typeName;
    }

    /**
     * 根据收发类型代码查名称
     * @param typeCode 收发类型代码
     * @return 收发类型名称
     */
    public static String getTypeName(String typeCode) {
        return TYPE_CODE_MAP.getOrDefault(typeCode, null);
    }

    /**
     * 根据收发类型名称查代码
     * @param typeName 收发类型名称
     * @return 收发类型代码
     */
    public static String getTypeCode(String typeName) {
        for (LsTypeEnum lsTypeEnum : LsTypeEnum.values()) {
            if (lsTypeEnum.getTypeName().equals(typeName)) {
                return lsTypeEnum.getTypeCode();
            }
        }
        return null;
    }

    /**
     * 获取所有收发类型名称
     * @return 收发类型名
     */
    public static List<String> getAllTypeNames() {
        List<String> typeNames = new ArrayList<>();
        for (LsTypeEnum type : values()) {
            typeNames.add(type.getTypeName());
        }
        return typeNames;
    }

    /**
     * 判断typeCode是否存在
     * @param typeCode 收发类型代码
     * @return 判断结果
     */
    public static boolean checkTypeCodeExist(String typeCode) {
        return TYPE_CODE_MAP.containsKey(typeCode);
    }
}
